/*
	Copyright (C) 2013 Pontificia Universidad Catolica del Peru
	contact: http://avatar.inf.pucp.edu.pe/realidad-aumentada/
	address contact: Av. Universitaria 1801, San Miguel, Lima-Peru.
	
	This file is part of UbicAR PUCP.

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with This program.  If not, see <http://www.gnu.org/licenses/>.
*/
/*
	Authors: Alvaro Roger Agüero Sánchez, Rodolfo Javier Galvez Meza
	Pontificia Universidad Catolica del Peru
	Departamento de Ingeniería
*/

package org.grupoavatar.guiaubicua.auxiliares;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;

import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.grupoavatar.guiaubicua.VInicial;
import org.grupoavatar.guiaubicua.entidades.ARMarker;
import org.grupoavatar.guiaubicua.mix.data.Encuesta;
import org.grupoavatar.guiaubicua.punto.EncuestaIntroScreen;
import org.grupoavatar.guiaubicua.punto.EncuestaScreen;

import android.database.sqlite.SQLiteException;
import android.os.AsyncTask;
import android.util.Log;

public class HiloEnviarResultadosEncuesta extends AsyncTask<URL, Void, Void> {

	private MySQLiteHelper db;
	private EncuestaScreen context;
	
	public HiloEnviarResultadosEncuesta(EncuestaScreen encuestaScreen) {
		// TODO Auto-generated constructor stub
		context = encuestaScreen;
	}

	@Override
	 protected void onPostExecute(Void url) {
		//TabGeneral.actualizar_rating();
		//mostrar mensaje de confirmación.
	 }
	
	@Override
	protected Void doInBackground(URL... urls) {
		// TODO Auto-generated method stub
		Log.d(VInicial.TAG + "-enviarRespuestaEncuesta", "Se empieza a ejecutar el hilo");
		enviarRespuestaEncuesta();		
		return null;
	}
	
	protected void enviarRespuestaEncuesta() {
		// TODO Auto-generated method stub
		try {
			ARMarker poi = context.getPoi();
			//crear Json y enviar...							
					
			Encuesta encuesta = EncuestaIntroScreen.getEncuestaActual();
			String json = "%7BidPunto:" + poi.getID() + "%2C";
			json = json + "idEncuesta:" + encuesta.getId() + "%2C";
			json = json + "idUsuario:" + EncuestaScreen.getIdUsuario() + "%2C";
			json = json + "respuestas:%5B";
			
			for (int i = 0; i < encuesta.getPreguntas().size(); i++) {
				for (int j = 0; j < encuesta.getPreguntas().get(i).getRespuestas().size(); j++) {
					json = json + encuesta.getPreguntas().get(i).getRespuestas().get(j).getId();
					if (i+1 < encuesta.getPreguntas().size() || j+1 < encuesta.getPreguntas().get(i).getRespuestas().size())
						json = json + "%2C";
				}
			}
			
			json = json + "%5D%7D";
			
			System.out.println(json);
			String url = Utiles.getEnviarResultadosEncuestaURL();
			System.out.println(url);
			try {
				String result = EntityUtils.toString(makeRequest(url, json).getEntity());
				System.out.println("respuesta:");
				System.out.println(result);
				//guarda resultado en BD
				guardaRespuestaEnBD(encuesta);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}						
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	private void guardaRespuestaEnBD(Encuesta encuesta) {
		// TODO Auto-generated method stub
		//Hacer que guarde el valor de su voto en una BD local
		try {
			//se debe guardar idEncuesta y el idPunto como combinación (2 columnas) que exista esa combinacion indica que ya se realizó la encuesta X para el punto Y. 
			//encuesta.getId()		id encuesta
			//EncuestaScreen.getPoi().getID();		id punto
			
		} catch(SQLiteException e) {
			db.close();
		}
	}

	
	
	public static HttpResponse makeRequest(String uri, String json) {
	    try {
	        //HttpPost httpPost = new HttpPost(uri);
	        HttpGet httpGet = new HttpGet(uri+json);
	        /*
	        httpPost.setEntity(new StringEntity(json));
	        httpPost.setHeader("Accept", "application/json");
	        httpPost.setHeader("Content-type", "application/json");
	        return new DefaultHttpClient().execute(httpPost);
	        */
	        return new DefaultHttpClient().execute(httpGet);
	    } catch (UnsupportedEncodingException e) {
	        e.printStackTrace();
	    } catch (ClientProtocolException e) {
	        e.printStackTrace();
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	    return null;
	}

}
